From: Eli Zaretskii Date: Fri, 23 Dec 2016 08:24:30 +0000 (+0200) Subject: Avoid aborts due to unaligned byte stack of threads X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1^2~5^2~21^2~2055 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=c4e38581d3b4d6b19921f0db81f319d19ae4fb9e;p=emacs.git Avoid aborts due to unaligned byte stack of threads * src/thread.c (run_thread): Make sure the pointers to thread byte stack are properly aligned. (Bug#25247) --- diff --git a/src/thread.c b/src/thread.c index 9613d1435f7..3f9595274e9 100644 --- a/src/thread.c +++ b/src/thread.c @@ -643,12 +643,19 @@ do_nothing (Lisp_Object whatever) static void * run_thread (void *state) { - char stack_pos; + /* Make sure stack_top and m_stack_bottom are properly aligned as GC + expects. */ + union + { + void *p; + char c; + } stack_pos; + struct thread_state *self = state; struct thread_state **iter; - self->m_stack_bottom = &stack_pos; - self->stack_top = &stack_pos; + self->m_stack_bottom = &stack_pos.c; + self->stack_top = &stack_pos.c; self->thread_id = sys_thread_self (); acquire_global_lock (self);